/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-empty-function */
/* eslint-disable @typescript-eslint/ban-ts-comment */
// @ts-nocheck
class Example {
  // property declarations are not part of ES6, though they are valid in TypeScript:
  // static staticProperty;
  // property;

  constructor(p: any) {}

  static staticMethod(p: any): void {}

  method(p: any): void {}
}

// constructor
Example = Reflect.decorate([], Example);

// property (on constructor)
Reflect.decorate([], Example, "staticProperty");

// property (on prototype)
Reflect.decorate([], Example.prototype, "property");

// method (on constructor)
Object.defineProperty(
  Example,
  "staticMethod",
  Reflect.decorate(
    [],
    Example,
    "staticMethod",
    Object.getOwnPropertyDescriptor(Example, "staticMethod"),
  ),
);

// method (on prototype)
Object.defineProperty(
  Example.prototype,
  "method",
  Reflect.decorate(
    [],
    Example.prototype,
    "method",
    Object.getOwnPropertyDescriptor(Example.prototype, "method"),
  ),
);
Reflect.getMetadataKeys(Example.prototype, "method");
Reflect.getMetadataKeys(Example, "staticMethod");
